<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,IE=9,chrome=1"><meta name="generator" content="MATLAB R2019b"><title>Four-Wheel Steering</title><style type="text/css">.rtcContent { padding: 30px; } .S0 { margin: 3px 10px 5px 4px; padding: 0px; line-height: 28.8px; min-height: 0px; white-space: pre-wrap; color: rgb(213, 80, 0); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 24px; font-weight: 400; text-align: left;  }
.S1 { margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(0, 0, 0); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;  }
.S2 { margin: 3px 10px 5px 4px; padding: 0px; line-height: 20px; min-height: 0px; white-space: pre-wrap; color: rgb(60, 60, 60); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 20px; font-weight: 700; text-align: left;  }
.S3 { margin: 10px 0px 20px; padding-left: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 14px;  }
.S4 { margin-left: 56px; line-height: 21px; min-height: 0px; text-align: left; white-space: pre-wrap;  }
.CodeBlock { background-color: #F7F7F7; margin: 10px 0 10px 0;}
.S5 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 1px solid rgb(233, 233, 233); border-bottom: 0px none rgb(0, 0, 0); border-radius: 4px 4px 0px 0px; padding: 6px 45px 0px 13px; line-height: 16.996px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px;  }
.S6 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 0px none rgb(0, 0, 0); border-bottom: 0px none rgb(0, 0, 0); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 16.996px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px;  }
.S7 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 0px none rgb(0, 0, 0); border-bottom: 1px solid rgb(233, 233, 233); border-radius: 0px; padding: 0px 45px 4px 13px; line-height: 16.996px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px;  }
.S8 { color: rgb(64, 64, 64); padding: 10px 0px 6px 17px; background: rgb(255, 255, 255) none repeat scroll 0% 0% / auto padding-box border-box; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; overflow-x: hidden; line-height: 16.996px;  }
.embeddedOutputsErrorElement {min-height: 18px; max-height: 250px; overflow: auto;}
.embeddedOutputsErrorElement.inlineElement {}
.embeddedOutputsErrorElement.rightPaneElement {}
.embeddedOutputsWarningElement{min-height: 18px; max-height: 250px; overflow: auto;}
.embeddedOutputsWarningElement.inlineElement {}
.embeddedOutputsWarningElement.rightPaneElement {}
.diagnosticMessage-wrapper {font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 12px;}
.diagnosticMessage-wrapper.diagnosticMessage-warningType {color: rgb(255,100,0);}
.diagnosticMessage-wrapper.diagnosticMessage-warningType a {color: rgb(255,100,0); text-decoration: underline;}
.diagnosticMessage-wrapper.diagnosticMessage-errorType {color: rgb(230,0,0);}
.diagnosticMessage-wrapper.diagnosticMessage-errorType a {color: rgb(230,0,0); text-decoration: underline;}
.diagnosticMessage-wrapper .diagnosticMessage-messagePart,.diagnosticMessage-wrapper .diagnosticMessage-causePart {white-space: pre-wrap;}
.diagnosticMessage-wrapper .diagnosticMessage-stackPart {white-space: pre;}
.embeddedOutputsTextElement,.embeddedOutputsVariableStringElement {white-space: pre; word-wrap: initial; min-height: 18px; max-height: 250px; overflow: auto;}
.textElement,.rtcDataTipElement .textElement {padding-top: 3px;}
.embeddedOutputsTextElement.inlineElement,.embeddedOutputsVariableStringElement.inlineElement {}
.inlineElement .textElement {}
.embeddedOutputsTextElement.rightPaneElement,.embeddedOutputsVariableStringElement.rightPaneElement {min-height: 16px;}
.rightPaneElement .textElement {padding-top: 2px; padding-left: 9px;}
.variableValue { width: 100% !important; }
.embeddedOutputsMatrixElement,.eoOutputWrapper .matrixElement {min-height: 18px; box-sizing: border-box;}
.embeddedOutputsMatrixElement .matrixElement,.eoOutputWrapper .matrixElement,.rtcDataTipElement .matrixElement {position: relative;}
.matrixElement .variableValue,.rtcDataTipElement .matrixElement .variableValue {white-space: pre; display: inline-block; vertical-align: top; overflow: hidden;}
.embeddedOutputsMatrixElement.inlineElement {}
.embeddedOutputsMatrixElement.inlineElement .topHeaderWrapper {display: none;}
.embeddedOutputsMatrixElement.inlineElement .veTable .body {padding-top: 0 !important; max-height: 100px;}
.inlineElement .matrixElement {max-height: 300px;}
.embeddedOutputsMatrixElement.rightPaneElement {}
.rightPaneElement .matrixElement,.rtcDataTipElement .matrixElement {overflow: hidden; padding-left: 9px;}
.rightPaneElement .matrixElement {margin-bottom: -1px;}
.embeddedOutputsMatrixElement .matrixElement .valueContainer,.eoOutputWrapper .matrixElement .valueContainer,.rtcDataTipElement .matrixElement .valueContainer {white-space: nowrap; margin-bottom: 3px;}
.embeddedOutputsMatrixElement .matrixElement .valueContainer .horizontalEllipsis.hide,.embeddedOutputsMatrixElement .matrixElement .verticalEllipsis.hide,.eoOutputWrapper .matrixElement .valueContainer .horizontalEllipsis.hide,.eoOutputWrapper .matrixElement .verticalEllipsis.hide,.rtcDataTipElement .matrixElement .valueContainer .horizontalEllipsis.hide,.rtcDataTipElement .matrixElement .verticalEllipsis.hide {display: none;}
.embeddedOutputsVariableMatrixElement .matrixElement .valueContainer.hideEllipses .verticalEllipsis, .embeddedOutputsVariableMatrixElement .matrixElement .valueContainer.hideEllipses .horizontalEllipsis {display:none;}
.embeddedOutputsMatrixElement .matrixElement .valueContainer .horizontalEllipsis,.eoOutputWrapper .matrixElement .valueContainer .horizontalEllipsis {margin-bottom: -3px;}
.eoOutputWrapper .embeddedOutputsVariableMatrixElement .matrixElement .valueContainer {cursor: default !important;}
.matrixElement .horizontalEllipsis,.rtcDataTipElement .matrixElement .horizontalEllipsis {display: inline-block; margin-top: 3px; width: 30px; height: 12px; background-repeat: no-repeat; background-image: url("");}
.matrixElement .verticalEllipsis,.textElement .verticalEllipsis,.rtcDataTipElement .matrixElement .verticalEllipsis,.rtcDataTipElement .textElement .verticalEllipsis {margin-left: 35px; width: 12px; height: 30px; background-repeat: no-repeat; background-image: url("");}</style></head><body><div class = rtcContent><h1  class = 'S0'><span>Four-Wheel Steering</span></h1><div  class = 'S1'><span>Copyright 2018-2019 The MathWorks, Inc.</span></div><h2  class = 'S2'><span>Kinematic Model</span></h2><div  class = 'S1'><span>This vehicle has four wheels which can all be driven and steered independently. For simplicity, we assume Ackermann steering such that the vehicle can be approximated as a two-wheel system (commonly known as a bicycle model).</span></div><div  class = 'S1'><span>Reference: </span><a href = "https://www.ntu.edu.sg/home/edwwang/confpapers/wdwicar01.pdf"><span style=' text-decoration: underline;'>https://www.ntu.edu.sg/home/edwwang/confpapers/wdwicar01.pdf</span></a></div><div  class = 'S1'><img class = "imageNode" src = "" width = "522" height = "232" alt = "" style = "vertical-align: baseline"></img></div><div  class = 'S1'><span style=' font-weight: bold;'>Inputs:</span></div><ul  class = 'S3'><li  class = 'S4'><span>Front and rear wheel speeds </span><span mathmlencoding="&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;inline&quot;&gt;&lt;mrow&gt;&lt;mo&gt;[&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;ω&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;italic&quot;&gt;f&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mo&gt;;&lt;/mo&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;ω&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;italic&quot;&gt;r&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;]&lt;/mo&gt;&lt;/mrow&gt;&lt;/math&gt;" style="vertical-align:-6px"><img src="" width="58" height="19.5" /></span><span>, in rad/s</span></li><li  class = 'S4'><span>Front and rear steer angles </span><span mathmlencoding="&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;mml:math xmlns:mml=&quot;http://www.w3.org/1998/Math/MathML&quot; xmlns:m=&quot;http://schemas.openxmlformats.org/officeDocument/2006/math&quot;&gt;&lt;mml:mo&gt;[&lt;/mml:mo&gt;&lt;mml:msub&gt;&lt;mml:mrow&gt;&lt;mml:mi&gt;ϕ&lt;/mml:mi&gt;&lt;/mml:mrow&gt;&lt;mml:mrow&gt;&lt;mml:mi&gt;f&lt;/mml:mi&gt;&lt;/mml:mrow&gt;&lt;/mml:msub&gt;&lt;mml:mi&gt; &lt;/mml:mi&gt;&lt;mml:mo&gt;;&lt;/mml:mo&gt;&lt;mml:msub&gt;&lt;mml:mrow&gt;&lt;mml:mi&gt;ϕ&lt;/mml:mi&gt;&lt;/mml:mrow&gt;&lt;mml:mrow&gt;&lt;mml:mi&gt;r&lt;/mml:mi&gt;&lt;/mml:mrow&gt;&lt;/mml:msub&gt;&lt;mml:mo&gt;]&lt;/mml:mo&gt;&lt;/mml:math&gt;
" style="vertical-align:-6px"><img src="" width="54" height="19.5" /></span><span>, in rad</span></li></ul><div  class = 'S1'><span style=' font-weight: bold;'>Outputs</span></div><ul  class = 'S3'><li  class = 'S4'><span>Linear velocities</span><span texencoding="v_X" style="vertical-align:-6px"><img src="" width="17" height="19.5" /></span><span> and </span><span texencoding="v_Y" style="vertical-align:-6px"><img src="" width="16" height="19.5" /></span><span>, in m/s</span></li><li  class = 'S4'><span>Angular velocity </span><span style="font-family: STIXGeneral, STIXGeneral-webfont, serif; font-style: italic; font-weight: 400; color: rgb(0, 0, 0);">ω</span><span>, in rad/s</span></li></ul><div  class = 'S1'><span style=' font-weight: bold;'>Forward Kinematics</span></div><div  class = 'S1'><span mathmlencoding="&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;mrow&gt;&lt;mtable columnalign=&quot;left&quot;&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;v&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;X&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mi&gt;R&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;mfenced open=&quot;(&quot; close=&quot;)&quot;&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;ω&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;cos&lt;/mi&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;ω&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;cos&lt;/mi&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/mfenced&gt;&lt;mi mathvariant=&quot;italic&quot;&gt; &lt;/mi&gt;&lt;/mrow&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;v&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;Y&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mi&gt;R&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;mfenced open=&quot;(&quot; close=&quot;)&quot;&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;ω&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;sin&lt;/mi&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;ω&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;sin&lt;/mi&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/mfenced&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;/mrow&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mrow&gt;&lt;mi&gt;ω&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mi&gt;R&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;L&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;L&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;ω&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;sin&lt;/mi&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;-&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;ω&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;sin&lt;/mi&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;mi&gt; &lt;/mi&gt;&lt;/mrow&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;/mtable&gt;&lt;/mrow&gt;&lt;/math&gt;" style="vertical-align:-53px"><img src="" width="228.5" height="118.5" /></span><span> </span></div><div  class = 'S1'><span style=' font-weight: bold;'>Inverse Kinematics</span></div><div  class = 'S1'><span>Due to the coupled kinematics of the system, the MATLAB and Simulink files in this toolbox provide 3 different inverse kinematics models.</span></div><div  class = 'S1'><span style=' text-decoration: underline;'>FRONT STEERING</span></div><ul  class = 'S3'><li  class = 'S4'><span>Assumption: Rear wheel is not steered</span></li><li  class = 'S4'><span>Inputs: Forward velocity </span><span texencoding="v_X" style="vertical-align:-6px"><img src="" width="17" height="19.5" /></span><span> and angular velocity </span><span style="font-family: STIXGeneral, STIXGeneral-webfont, serif; font-style: italic; font-weight: 400; color: rgb(0, 0, 0);">ω</span></li></ul><div  class = 'S1'><span mathmlencoding="&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;mrow&gt;&lt;mtable columnalign=&quot;left&quot;&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;ω&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;v&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;X&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;italic&quot;&gt;R&lt;/mi&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;cos&lt;/mi&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;italic&quot;&gt;f&lt;/mi&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mi&gt;ω&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;v&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;X&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;R&lt;/mi&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;atan&lt;/mi&gt;&lt;mfenced open=&quot;(&quot; close=&quot;)&quot;&gt;&lt;mrow&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mi&gt;ω&lt;/mi&gt;&lt;mfenced open=&quot;(&quot; close=&quot;)&quot;&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;L&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;L&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/mfenced&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;v&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;X&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;/mfenced&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mrow&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;/mtable&gt;&lt;/mrow&gt;&lt;/math&gt;" style="vertical-align:-38px"><img src="" width="236.5" height="87" /></span></div><div  class = 'S1'><span style=' text-decoration: underline;'>ZERO SIDESLIP</span></div><ul  class = 'S3'><li  class = 'S4'><span>Assumption: Front and rear wheels steered with opposite angles to minimize sideslip (lateral velocity in Y-direction)</span></li><li  class = 'S4'><span>Inputs: Forward velocity </span><span texencoding="v_X" style="vertical-align:-6px"><img src="" width="17" height="19.5" /></span><span> and angular velocity </span><span style="font-family: STIXGeneral, STIXGeneral-webfont, serif; font-style: italic; font-weight: 400; color: rgb(0, 0, 0);">ω</span></li></ul><div  class = 'S1'><span mathmlencoding="&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;mrow&gt;&lt;mtable columnalign=&quot;left&quot;&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mrow&gt;&lt;mi&gt;ω&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;v&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;X&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;R&lt;/mi&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;cos&lt;/mi&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mtext&gt;   &lt;/mtext&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;ω&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;ω&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;ω&lt;/mi&gt;&lt;/mrow&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mrow&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;atan&lt;/mi&gt;&lt;mfenced open=&quot;(&quot; close=&quot;)&quot;&gt;&lt;mrow&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mi&gt;ω&lt;/mi&gt;&lt;mfenced open=&quot;(&quot; close=&quot;)&quot;&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;L&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;L&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/mfenced&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;v&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;X&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;/mfenced&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mo&gt;-&lt;/mo&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;/mrow&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;/mtable&gt;&lt;/mrow&gt;&lt;/math&gt;" style="vertical-align:-36px"><img src="" width="271" height="84" /></span></div><div  class = 'S1'><span style=' text-decoration: underline;'>PARALLEL STEERING</span></div><ul  class = 'S3'><li  class = 'S4'><span>Assumption: Front and rear wheels steered with equal angles, so the vehicle moves without rotating</span></li><li  class = 'S4'><span>Inputs: Linear velocities </span><span texencoding="v_X" style="vertical-align:-6px"><img src="" width="17" height="19.5" /></span><span> </span><span>and </span><span texencoding="v_Y" style="vertical-align:-6px"><img src="" width="16" height="19.5" /></span></li></ul><div  class = 'S1'><span mathmlencoding="&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;mrow&gt;&lt;mtable columnalign=&quot;left&quot;&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mrow&gt;&lt;mi&gt;v&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;s&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;i&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;g&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;n&lt;/mi&gt;&lt;mfenced open=&quot;(&quot; close=&quot;)&quot;&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;v&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/mfenced&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;R&lt;/mi&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;msqrt&gt;&lt;mrow&gt;&lt;msubsup&gt;&lt;mrow&gt;&lt;mi&gt;v&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;X&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/mrow&gt;&lt;/msubsup&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msubsup&gt;&lt;mrow&gt;&lt;mi&gt;v&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;Y&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/mrow&gt;&lt;/msubsup&gt;&lt;/mrow&gt;&lt;/msqrt&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt;ω&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;ω&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;ω&lt;/mi&gt;&lt;/mrow&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mrow&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;atan&lt;/mi&gt;&lt;mfenced open=&quot;(&quot; close=&quot;)&quot;&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;v&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;Y&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;/&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;v&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;X&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/mfenced&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mi&gt; &lt;/mi&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mo&gt;-&lt;/mo&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;/mrow&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;/mtable&gt;&lt;/mrow&gt;&lt;/math&gt;" style="vertical-align:-26px"><img src="" width="270" height="63" /></span></div><h2  class = 'S2'><span>MATLAB Usage</span></h2><div  class = 'S1'><span>Create a </span><span style=' font-family: monospace;'>FourWheelSteering</span><span> object</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S5'><span style="white-space: pre;"><span>wheelRadius = 0.1;          </span><span style="color: rgb(60, 118, 61);">% Wheel radius [m]</span></span></div></div><div class="inlineWrapper"><div  class = 'S6'><span style="white-space: pre;"><span>wheelDists = [0.3, 0.25];   </span><span style="color: rgb(60, 118, 61);">% Front and rear wheel distances to CG [m]</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>vehicle = FourWheelSteering(wheelRadius,wheelDists)</span></span></div><div  class = 'S8'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="D94B7FAC" data-testid="output_0" data-width="428" data-height="92" data-hashorizontaloverflow="false" style="width: 458px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">vehicle = </span></div><div>  FourWheelSteering with properties:

       wheelRadius: 0.1000
    frontWheelDist: 0.3000
     rearWheelDist: 0.2500</div></div></div></div></div></div><div  class = 'S1'><span>Solve forward kinematics</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S5'><span style="white-space: pre;"><span>wheelSpd = [1; 1]; 	</span><span style="color: rgb(60, 118, 61);">% Wheel speeds [wf; wr]</span></span></div></div><div class="inlineWrapper"><div  class = 'S6'><span style="white-space: pre;"><span>steerAng = [pi/8; 0]; 	</span><span style="color: rgb(60, 118, 61);">% Steer angles [phif; phir]	</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>vel = forwardKinematics(vehicle,wheelSpd,steerAng)</span></span></div><div  class = 'S8'><div class="inlineElement eoOutputWrapper embeddedOutputsMatrixElement" uid="78D62548" data-testid="output_1" data-width="428" style="width: 458px;"><div class="matrixElement veSpecifier"><div class="veVariableName variableNameElement" style="width: 428px;"><span>vel = </span><span class="veVariableValueSummary"></span></div><div class="valueContainer" data-layout="{&quot;columnWidth&quot;:65.9749984741211,&quot;totalColumns&quot;:&quot;1&quot;,&quot;totalRows&quot;:&quot;3&quot;,&quot;charsPerColumn&quot;:10}"><div class="variableValue" style="width: 67.975px;">    0.0962
    0.0191
    0.0696</div><div class="horizontalEllipsis hide"></div><div class="verticalEllipsis hide"></div></div></div></div></div></div></div><div  class = 'S1'><span>Solve </span><span style=' text-decoration: underline;'>front steering</span><span> inverse kinematics</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S5'><span style="white-space: pre;"><span>vx = 0.5;   </span><span style="color: rgb(60, 118, 61);">% Forward speed [m/s]</span></span></div></div><div class="inlineWrapper"><div  class = 'S6'><span style="white-space: pre;"><span>w = 1; 	    </span><span style="color: rgb(60, 118, 61);">% Angular velocity [rad/s]</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>[wheelSpdFS,steerAngFS] = inverseKinematicsFrontSteer(vehicle,vx,w)</span></span></div><div  class = 'S8'><div class="inlineElement eoOutputWrapper embeddedOutputsMatrixElement" uid="BF6B5167" data-testid="output_2" data-width="428" style="width: 458px;"><div class="matrixElement veSpecifier"><div class="veVariableName variableNameElement" style="width: 428px;"><span>wheelSpdFS = </span><span class="veVariableValueSummary"></span></div><div class="valueContainer" data-layout="{&quot;columnWidth&quot;:65.9749984741211,&quot;totalColumns&quot;:&quot;1&quot;,&quot;totalRows&quot;:&quot;2&quot;,&quot;charsPerColumn&quot;:10}"><div class="variableValue" style="width: 67.975px;">    7.4330
    5.0000</div><div class="horizontalEllipsis hide"></div><div class="verticalEllipsis hide"></div></div></div></div><div class="inlineElement eoOutputWrapper embeddedOutputsMatrixElement" uid="72097CDD" data-testid="output_3" data-width="428" style="width: 458px;"><div class="matrixElement veSpecifier"><div class="veVariableName variableNameElement" style="width: 428px;"><span>steerAngFS = </span><span class="veVariableValueSummary"></span></div><div class="valueContainer" data-layout="{&quot;columnWidth&quot;:65.9749984741211,&quot;totalColumns&quot;:&quot;1&quot;,&quot;totalRows&quot;:&quot;2&quot;,&quot;charsPerColumn&quot;:10}"><div class="variableValue" style="width: 67.975px;">    0.8330
         0</div><div class="horizontalEllipsis hide"></div><div class="verticalEllipsis hide"></div></div></div></div></div></div></div><div  class = 'S1'><span>Solve </span><span style=' text-decoration: underline;'>zero sideslip</span><span> inverse kinematics</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S5'><span style="white-space: pre;"><span>vx = 0.5;   </span><span style="color: rgb(60, 118, 61);">% Forward speed [m/s]</span></span></div></div><div class="inlineWrapper"><div  class = 'S6'><span style="white-space: pre;"><span>w = 1; 	    </span><span style="color: rgb(60, 118, 61);">% Angular velocity [rad/s]</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>[wheelSpdZS,steerAngZS] = inverseKinematicsZeroSideslip(vehicle,vx,w)</span></span></div><div  class = 'S8'><div class="inlineElement eoOutputWrapper embeddedOutputsMatrixElement" uid="D308237A" data-testid="output_4" data-width="428" style="width: 458px;"><div class="matrixElement veSpecifier"><div class="veVariableName variableNameElement" style="width: 428px;"><span>wheelSpdZS = </span><span class="veVariableValueSummary"></span></div><div class="valueContainer" data-layout="{&quot;columnWidth&quot;:65.9749984741211,&quot;totalColumns&quot;:&quot;1&quot;,&quot;totalRows&quot;:&quot;2&quot;,&quot;charsPerColumn&quot;:10}"><div class="variableValue" style="width: 67.975px;">    7.4330
    7.4330</div><div class="horizontalEllipsis hide"></div><div class="verticalEllipsis hide"></div></div></div></div><div class="inlineElement eoOutputWrapper embeddedOutputsMatrixElement" uid="489ADBDA" data-testid="output_5" data-width="428" style="width: 458px;"><div class="matrixElement veSpecifier"><div class="veVariableName variableNameElement" style="width: 428px;"><span>steerAngZS = </span><span class="veVariableValueSummary"></span></div><div class="valueContainer" data-layout="{&quot;columnWidth&quot;:65.9749984741211,&quot;totalColumns&quot;:&quot;1&quot;,&quot;totalRows&quot;:&quot;2&quot;,&quot;charsPerColumn&quot;:10}"><div class="variableValue" style="width: 67.975px;">    0.8330
   -0.8330</div><div class="horizontalEllipsis hide"></div><div class="verticalEllipsis hide"></div></div></div></div></div></div></div><div  class = 'S1'><span>Solve </span><span style=' text-decoration: underline;'>parallel steering</span><span> inverse kinematics</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S5'><span style="white-space: pre;"><span>vx = 1; 	</span><span style="color: rgb(60, 118, 61);">% Forward speed [m/s]</span></span></div></div><div class="inlineWrapper"><div  class = 'S6'><span style="white-space: pre;"><span>vy = 0.3;	</span><span style="color: rgb(60, 118, 61);">% Lateral speed [m/s]</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>[wheelSpdPS,steerAngPS] = inverseKinematicsParallelSteer(vehicle,vx,vy)</span></span></div><div  class = 'S8'><div class="inlineElement eoOutputWrapper embeddedOutputsMatrixElement" uid="29BF946A" data-testid="output_6" data-width="428" style="width: 458px;"><div class="matrixElement veSpecifier"><div class="veVariableName variableNameElement" style="width: 428px;"><span>wheelSpdPS = </span><span class="veVariableValueSummary"></span></div><div class="valueContainer" data-layout="{&quot;columnWidth&quot;:65.9749984741211,&quot;totalColumns&quot;:&quot;1&quot;,&quot;totalRows&quot;:&quot;2&quot;,&quot;charsPerColumn&quot;:10}"><div class="variableValue" style="width: 67.975px;">   10.4403
   10.4403</div><div class="horizontalEllipsis hide"></div><div class="verticalEllipsis hide"></div></div></div></div><div class="inlineElement eoOutputWrapper embeddedOutputsMatrixElement" uid="732F4E2C" data-testid="output_7" data-width="428" style="width: 458px;"><div class="matrixElement veSpecifier"><div class="veVariableName variableNameElement" style="width: 428px;"><span>steerAngPS = </span><span class="veVariableValueSummary"></span></div><div class="valueContainer" data-layout="{&quot;columnWidth&quot;:65.9749984741211,&quot;totalColumns&quot;:&quot;1&quot;,&quot;totalRows&quot;:&quot;2&quot;,&quot;charsPerColumn&quot;:10}"><div class="variableValue" style="width: 67.975px;">    0.2915
    0.2915</div><div class="horizontalEllipsis hide"></div><div class="verticalEllipsis hide"></div></div></div></div></div></div></div><div  class = 'S1'><span>Reference examples:</span></div><ul  class = 'S3'><li  class = 'S4'><a href = "matlab:edit mrsFourWheelSteerDiscrete"><span>Discrete-time kinematic simulation</span></a></li><li  class = 'S4'><a href = "matlab:edit mrsFourWheelSteerContinuous"><span>Continuous-time kinematic simulation</span></a></li></ul><h2  class = 'S2'><span>Simulink Usage</span></h2><div  class = 'S1'><span>Simulink blocks are in the </span><span style=' font-weight: bold;'>Kinematic Models &gt; Four-Wheel Steering</span><span> section of the </span><a href = "matlab:mobileRoboticsLib"><span>block library</span></a><span>.</span></div><div  class = 'S1'><span>Use the </span><span style=' font-weight: bold;'>Four-Wheel Steering Forward Kinematics</span><span> and </span><span style=' font-weight: bold;'>Four-Wheel Steering Inverse Kinematics</span><span> blocks to convert between body velocities and wheel velocities and steer angles.</span></div><div  class = 'S1'><span>Use the </span><span style=' font-weight: bold;'>Four-Wheel Steering Simulation</span><span> block to simulate the pose given wheel speeds as inputs. You can configure the initial pose and simulation sample time.</span></div><div  class = 'S1'><img class = "imageNode" src = "" width = "540" height = "370" alt = "" style = "vertical-align: baseline"></img></div><div  class = 'S1'><span>Reference example:</span></div><ul  class = 'S3'><li  class = 'S4'><a href = "matlab:mrsFourWheelSteerModel"><span>Four-wheel steering kinematic simulation</span></a></li></ul></div>
<br>
<!-- 
##### SOURCE BEGIN #####
%% Four-Wheel Steering
% Copyright 2018-2019 The MathWorks, Inc.
%% Kinematic Model
% This vehicle has four wheels which can all be driven and steered independently. 
% For simplicity, we assume Ackermann steering such that the vehicle can be approximated 
% as a two-wheel system (commonly known as a bicycle model).
% 
% Reference: <https://www.ntu.edu.sg/home/edwwang/confpapers/wdwicar01.pdf https://www.ntu.edu.sg/home/edwwang/confpapers/wdwicar01.pdf>
% 
% 
% 
% *Inputs:*
%% 
% * Front and rear wheel speeds $\left\lbrack \omega_f \;;\;\omega_r \right\rbrack$, 
% in rad/s
% * Front and rear steer angles $\left\lbrack \phi_f \ ;\phi_r \right\rbrack$, 
% in rad
%% 
% *Outputs*
%% 
% * Linear velocities$v_X$ and $v_Y$, in m/s
% * Angular velocity $\omega$, in rad/s
%% 
% *Forward Kinematics*
% 
% $$\begin{array}{l}v_X =\frac{R}{2}{\left(\omega_f \;\cos \phi_f +\omega_{r\;} 
% \cos \phi_r \right)}\ \\v_Y =\frac{R}{2}{\left(\omega_f \;\sin \phi_f +\omega_r 
% \;\sin \phi_r \right)}\ \ \\\omega =\frac{R}{L_f +L_r }\ \left(\omega_f \;\sin 
% \phi_f -\omega_r \;\sin \phi_r \right)\ \end{array}$$ 
% 
% *Inverse Kinematics*
% 
% Due to the coupled kinematics of the system, the MATLAB and Simulink files 
% in this toolbox provide 3 different inverse kinematics models.
% 
% FRONT STEERING
%% 
% * Assumption: Rear wheel is not steered
% * Inputs: Forward velocity $v_X$ and angular velocity $\omega$
%% 
% $$\begin{array}{l}\omega_f =\frac{v_X }{R\;\cos \phi_{f\;} }\ ,\ \ \ \ \ \ 
% \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\;\;\;\;\omega }_r =\frac{v_X }{R}\\\phi_f =\textrm{atan}{\left(\frac{\omega 
% {\left(L_f +L_r \right)}}{v_X }\right)}\ ,\ \ \ {\ \ \ \phi }_r =0\end{array}$$
% 
% ZERO SIDESLIP
%% 
% * Assumption: Front and rear wheels steered with opposite angles to minimize 
% sideslip (lateral velocity in Y-direction)
% * Inputs: Forward velocity $v_X$ and angular velocity $\omega$
%% 
% $$\begin{array}{l}\omega =\frac{v_X }{R\;\cos \phi \;}\ ,\ \ \ \ \ \ \ \ \ 
% \ \ \ \ \ \ \ \ \ \ \ \ \ \;\;\;\omega_r =\omega_f =\omega \\\phi =\textrm{atan}{\left(\frac{\omega 
% {\left(L_f +L_r \right)}}{v_X }\right)}\ ,\ \ \ {\ \ \ \phi }_r ={-\phi }_f 
% =\phi \end{array}$$
% 
% PARALLEL STEERING
%% 
% * Assumption: Front and rear wheels steered with equal angles, so the vehicle 
% moves without rotating
% * Inputs: Linear velocities $v_X$ and $v_Y$
%% 
% $$\begin{array}{l}v=\frac{\mathrm{s}\mathrm{i}\mathrm{g}\mathrm{n}{\left(v_x 
% \right)}}{R}\sqrt{v_X^2 +v_Y^2 }\ ,\ \ \ \ \ \ \ {\ \ \omega }_r =\omega_f =\omega 
% \\\phi =\textrm{atan}{\left(v_Y /v_X \right)}\ ,\ \ \ {\ \ \ \ \ \ \ \ \ \ \ 
% \ \ \ \;\phi }_r ={-\phi }_f =\phi \end{array}$$
%% MATLAB Usage
% Create a |FourWheelSteering| object

wheelRadius = 0.1;          % Wheel radius [m]
wheelDists = [0.3, 0.25];   % Front and rear wheel distances to CG [m]
vehicle = FourWheelSteering(wheelRadius,wheelDists)
%% 
% Solve forward kinematics

wheelSpd = [1; 1]; 	% Wheel speeds [wf; wr]
steerAng = [pi/8; 0]; 	% Steer angles [phif; phir]	
vel = forwardKinematics(vehicle,wheelSpd,steerAng)
%% 
% Solve front steering inverse kinematics

vx = 0.5;   % Forward speed [m/s]
w = 1; 	    % Angular velocity [rad/s]
[wheelSpdFS,steerAngFS] = inverseKinematicsFrontSteer(vehicle,vx,w)
%% 
% Solve zero sideslip inverse kinematics

vx = 0.5;   % Forward speed [m/s]
w = 1; 	    % Angular velocity [rad/s]
[wheelSpdZS,steerAngZS] = inverseKinematicsZeroSideslip(vehicle,vx,w)
%% 
% Solve parallel steering inverse kinematics

vx = 1; 	% Forward speed [m/s]
vy = 0.3;	% Lateral speed [m/s]
[wheelSpdPS,steerAngPS] = inverseKinematicsParallelSteer(vehicle,vx,vy)
%% 
% Reference examples:
%% 
% * <matlab:edit mrsFourWheelSteerDiscrete Discrete-time kinematic simulation>
% * <matlab:edit mrsFourWheelSteerContinuous Continuous-time kinematic simulation>
%% Simulink Usage
% Simulink blocks are in the *Kinematic Models > Four-Wheel Steering* section 
% of the <matlab:mobileRoboticsLib block library>.
% 
% Use the *Four-Wheel Steering Forward Kinematics* and *Four-Wheel Steering 
% Inverse Kinematics* blocks to convert between body velocities and wheel velocities 
% and steer angles.
% 
% Use the *Four-Wheel Steering Simulation* block to simulate the pose given 
% wheel speeds as inputs. You can configure the initial pose and simulation sample 
% time.
% 
% 
% 
% Reference example:
%% 
% * <matlab:mrsFourWheelSteerModel Four-wheel steering kinematic simulation>
##### SOURCE END #####
--></body></html>